Fix performance regression for borderless transparent windows with shadow.
authorRichard Hult <richard@imendio.com>
Wed, 27 Feb 2008 10:49:22 +0000 (10:49 +0000)
committerRichard Hult <rhult@src.gnome.org>
Wed, 27 Feb 2008 10:49:22 +0000 (10:49 +0000)
2008-02-27  Richard Hult  <richard@imendio.com>

* gdk/quartz/GdkQuartzView.c:
* gdk/quartz/GdkQuartzView.h:
* gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_decorations):
Fix performance regression for borderless transparent windows
with shadow.

svn path=/trunk/; revision=19666

ChangeLog
gdk/quartz/GdkQuartzView.c
gdk/quartz/GdkQuartzView.h
gdk/quartz/gdkwindow-quartz.c

index 4bd258541929d17b677b9cb709ffcf87af0a2829..91e5f70b055237271a722f2f75fd9c91b64ed09b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-02-27  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/GdkQuartzView.c:
+       * gdk/quartz/GdkQuartzView.h:
+       * gdk/quartz/gdkwindow-quartz.c: (gdk_window_set_decorations):
+       Fix performance regression for borderless transparent windows
+       with shadow.
+
 2008-02-27  Emmanuele Bassi  <ebassi@gnome.org>
 
        * tests/testgtk.c: Revert back to r19454.
index 44f21e5a4f8d46a029d4aa36ba6c2238c1f90544..1063e7bfb94f3476334b2d50ffa10e743f27a60d 100644 (file)
 
   gdk_region_destroy (region);
 
-  /* Invalidate the window shadow for non-opaque views that have shadow
-   * enabled, otherwise the shadow doesn't get updated to what we draw.
-   */
-  if (![self isOpaque] && [[self window] hasShadow])
-    [[self window] invalidateShadow];
+  if (needsInvalidateShadow)
+    {
+      [[self window] invalidateShadow];
+      needsInvalidateShadow = NO;
+    }
 
   GDK_QUARTZ_RELEASE_POOL;
 }
 
+-(void)setNeedsInvalidateShadow:(BOOL)invalidate
+{
+  needsInvalidateShadow = invalidate;
+}
+
 /* For information on setting up tracking rects properly, see here:
  * http://developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/EventOverview.pdf
  */
index 29172e4382102a802b90996b4fc8ad9bca601b89..752c3989b38a719643e523303981bea27c43df1e 100644 (file)
 @interface GdkQuartzView : NSView {
   GdkWindow *gdk_window;
   NSTrackingRectTag trackingRect;
+  BOOL needsInvalidateShadow;
 }
 
 -(void)setGdkWindow:(GdkWindow *)window;
 -(GdkWindow *)gdkWindow;
+-(void)setNeedsInvalidateShadow:(BOOL)invalidate;
 
 @end
index d585f1d60403ac2341195f5516bcca84ed8052c0..932e5f568bb7442be0bde2b96a323507d39ed9af 100644 (file)
@@ -2631,6 +2631,12 @@ gdk_window_set_decorations (GdkWindow       *window,
 
       [impl->toplevel setContentView:old_view];
       [impl->toplevel setFrame:rect display:YES];
+
+      /* Invalidate the window shadow for non-opaque views that have shadow
+       * enabled, to get the shadow shape updated.
+       */
+      if (![old_view isOpaque] && [impl->toplevel hasShadow])
+        [(GdkQuartzView*)old_view setNeedsInvalidateShadow:YES];
     }
 
   GDK_QUARTZ_RELEASE_POOL;